//你的朋友正在使用键盘输入他的名字 name。偶尔，在键入字符 c 时，按键可能会被长按，而字符可能被输入 1 次或多次。
//
// 你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字（其中一些字符可能被长按），那么就返回 True。
//
//
//
// 示例 1：
//
//
//输入：name = "alex", typed = "aaleex"
//输出：true
//解释：'alex' 中的 'a' 和 'e' 被长按。
//
//
// 示例 2：
//
//
//输入：name = "saeed", typed = "ssaaedd"
//输出：false
//解释：'e' 一定需要被键入两次，但在 typed 的输出中不是这样。
//
//
//
//
// 提示：
//
//
// 1 <= name.length, typed.length <= 1000
// name 和 typed 的字符都是小写字母
//
//
// Related Topics 双指针 字符串 👍 266 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
function isLongPressedName(name: string, typed: string): boolean {

    let n : number = 0
    let t : number = 0

    while (n < name.length) {
        if (name[n] === typed[t]) {
            n ++
            t ++
        }
        else {
            if (typed[t] !== typed[t - 1]) return false
            while (typed[t] === typed[t - 1] && t < typed.length) {
                t ++
            }
        }
    }
    // 这里有坑啊
    while (t < typed.length) {
        if (typed[t] !== typed[t - 1]) return false
        t ++
    }
    return true
};
//leetcode submit region end(Prohibit modification and deletion)
function isLongPressedName2(name: string, typed: string): boolean {
    const nameLength: number = name.length,
        typeLength: number = typed.length;
    let i: number = 0,
        j: number = 0;
    while (i < nameLength && j < typeLength) {
        if (name[i] !== typed[j]) return false;
        i++;
        j++;
        if (i === nameLength || name[i] !== name[i - 1]) {
            // 跳过typed中的连续相同字符
            while (j < typeLength && typed[j] === typed[j - 1]) {
                j++;
            }
        }
    }
    return i === nameLength && j === typeLength;
};
